package com.lxy.file.common;

import com.lxy.file.enums.ExceptionEnum;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;

import java.io.Serializable;

/** 通用结果返回
 * @author LiuXiaoYu
 * @date 2021/7/19- 9:58
 */
@Data
@NoArgsConstructor
@ToString
public class Result<T> implements Serializable {
       private Integer code;
       private String message;
       private T data;

       private Result(Integer code, String message, T data){
           this.code=code;
           this.message=message;
           this.data=data;
       }

    private Result(Integer code, String message) {
        this.code = code;
        this.message = message;
    }


    public Result(String msg) {
        this.message=msg;
    }

    /**
     * 带数据成功返回
     *
     * @param data 数据
     * @param <T> 泛型
     * @return 通用结果
     */
    public static <T> Result<T> success(T data) {
        return new Result<>(ExceptionEnum.SUCCESS.getCode(), ExceptionEnum.SUCCESS.getDesc(), data);
    }

    /**
     * 不带数据成功返回
     *
     * @return 通用结果返回
     */
    public static <T> Result<T> success() {
        return success(null);
    }

    /**
     * 通用错误返回
     *
     * @param exceptionEnum 异常处理枚举
     * @return 通用结果返回
     */
    public static <T> Result<T> error(ExceptionEnum exceptionEnum) {
        return new Result<>(exceptionEnum.getCode(), exceptionEnum.getDesc());
    }
    /**
     * 通用错误返回
     *
     * @param exceptionEnum 异常处理枚举
     * @return 通用结果返回
     */
    public static <T> Result<T> error(ExceptionEnum exceptionEnum,String msg,T data) {
        return new Result<>(exceptionEnum.getCode(), msg,data);
    }

    /**
     * 通用错误带自定义信息返回
     *
     * @param exceptionEnum 异常处理枚举
     * @param msg 信息
     * @return 通用结果返回
     */
    public static <T> Result<T> error(ExceptionEnum exceptionEnum, String msg) {
        return new Result<>(exceptionEnum.getCode(), msg);
    }

//
    /**
     * 只返回自定义信息
     *
     * @param msg 信息
     * @return 通用结果返回
     */
    public static <T> Result<T> error(String msg) {
        return new Result<>(msg);
    }
    /**
     * 通用错误带数据返回
     *
     * @param exceptionEnum 异常处理枚举
     * @param data 信息
     * @param <T> 泛型
     * @return 通用结果返回
     */
    public static <T> Result<T> error(ExceptionEnum exceptionEnum, T data) {
        return new Result<>(exceptionEnum.getCode(), exceptionEnum.getDesc(), data);
    }
}
